package net.sf.rose.util;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 类说明：日期格式化工具类
 * @author fengjian
 * @since 2016/05/09
 */
public class DateFormat {

	/** yyyy-MM-dd */
    public static String DATE_FORMAT_1 = "yyyy-MM-dd";

    /** yyyy-MM-dd */
    public static String DATE_FORMAT_2 = "yyyyMMdd";

    /** yyyy-MM-dd HH:mm:ss */
    public static String DATE_FORMAT_3 = "yyyy-MM-dd HH:mm:ss";

    /** yyyyMMddHHmmss */
    public static String DATE_FORMAT_4 = "yyyyMMddHHmmss";

    /** MM-dd-yyyy HH:mm */
    public static String DATE_FORMAT_5 = "MM-dd-yyyy HH:mm";

    /** yyyyMMddHHmmssSSS */
    public static String DATE_FORMAT_6 = "yyyyMMddHHmmssSSS";

    /** yyyy-MM-dd HH:mm:ss a */
    public static String DATE_FORMAT_7 = "yyyy-MM-dd HH:mm:ss a";

    /**
     * 功能：获取当前日期
     * @return 当前日期
     */
    public static Timestamp getTimestamp() {
        return new Timestamp(new Date().getTime());
    }

    /**
     * 功能：将字符串格式化成日期
     * @param date 日期
     * @return 日期对象
     */
    public static Timestamp toTimestamp(Date date) {
        return new Timestamp(date.getTime());
    }

    /**
     * 功能：将字符串格式化成日期
     * @param arg 日期字符串
     * @param format 格式字符串
     * @return 日期对象
     */
    public static Timestamp toTimestamp(String arg, String format) {
        DateFormat bean = new DateFormat();
        bean.setDatePattern(format);
        return new Timestamp(bean.format(arg).getTime());
    }

    /**
     * 功能：将字符串格式化成日期
     * @param arg 日期字符串
     * @param format 格式字符串
     * @return 日期对象
     */
    public static Date format(String arg, String format) {
        DateFormat bean = new DateFormat();
        bean.setDatePattern(format);
        return bean.format(arg);
    }

    /**
     * 功能：将日期格式化成字符串
     * @param date 日期对象
     * @param format 格式字符串
     * @return 日期字符串
     */
    public static String format(Date date, String format) {
        DateFormat bean = new DateFormat();
        bean.setDatePattern(format);
        return bean.format(date);
    }

	/**
     * 功能：从日期对象中年月日
     * @param date 日期对象
     * @return 日值
     */
	public static Date getDate(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.MILLISECOND, 0);
		return c.getTime();
	}

    /**
     * 功能：从日期对象中获取当前年份
     * @param date 日期对象
     * @return 年份
     */
    public static int getYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.YEAR);
    }

    /**
     * 功能：从日期对象中获取当前月
     * @param date 日期对象
     * @return 月
     */
    public static int getMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH) + 1;
    }

    /**
     * 功能：从日期对象中获取当前日
     * @param date 日期对象
     * @return 日值
     */
    public static int getDay(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }

	/**
     * 功能：获取当前的周一日期值
     * @param date 日期对象
     * @return 周一值
     */
    public static Date getMondayOfWeek(Date date) {
        Calendar calendar = Calendar.getInstance();
		calendar.setFirstDayOfWeek(Calendar.MONDAY);
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		return calendar.getTime();
    }

    /**
     * 功能：从日期对象中获取小时
     * @param date 日期对象
     * @return 小时值
     */
    public static int getHour(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 功能：从日期对象中获取分钟
     * @param date 日期对象
     * @return 分钟值
     */
    public static int getMinute(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MINUTE);
    }

    /**
     * 功能：从日期对象中获取秒值
     * @param date 日期对象
     * @return 秒值
     */
    public static int getSecond(java.util.Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.SECOND);
    }

    /**
     * 功能：获取二个日期之间相隔多少毫秒
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 毫秒数
     */
    public static long getMillisecond(Date startDate, Date endDate) {
        return endDate.getTime() - startDate.getTime();
    }

    /**
     * 功能：获取二个日期之间相隔多少毫秒
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @param format 日期格式
     * @return 毫秒数
     */
    public static long getMillisecond(String startDate, String endDate, String format) {
        DateFormat bean = new DateFormat();
        bean.setDatePattern(format);
        return getMillisecond(bean.format(startDate), bean.format(endDate));
    }

    /**
     * 功能：获取二个日期之间相隔多少分钟
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 分钟数
     */
    public static int getMinute(Date startDate, Date endDate) {
        return (int) ((endDate.getTime() - startDate.getTime()) / (1000 * 60));
    }

    /**
     * 功能：获取二个日期之间相隔多少小时
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 小时数
     */
    public static int getHour(Date startDate, Date endDate) {
        return (int) ((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60));
    }

    /**
     * 功能：获取二个日期之间相隔多少天
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 天数
     */
    public static int getDay(Date startDate, Date endDate) {
        return (int) ((endDate.getTime() - startDate.getTime()) / (double) (1000 * 60 * 60 * 24));
    }

    /**
     * 给指定的日期往后加n年
     * @param date 日期对象
     * @param n 几年
     * @return 日期
     */
    public static Date addYear(Date date, int n) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, n);
        return calendar.getTime();
    }

    /**
     * 给指定的日期往后加n月
     * @param date 日期对象
     * @param n 几月
     * @return 日期
     */
    public static Date addMonth(Date date, int n) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, n);
        return calendar.getTime();
    }

    /**
     * 给指定的日期往后加n天
     * @param date 日期对象
     * @param n 几天
     * @return 日期
     */
    public static Date addDay(Date date, int n) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_YEAR, n);
        return calendar.getTime();
    }

    /**
     * 给指定的日期往后加n小时
     * @param date 日期对象
     * @param n 几小时
     * @return 日期
     */
    public static Date addHour(Date date, int n) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR, n);
        return calendar.getTime();
    }

    /**
     * 给指定的日期往后加n分钟
     * @param date 日期对象
     * @param n 几分钟
     * @return 日期
     */
    public static Date addMinute(Date date, int n) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, n);
        return calendar.getTime();
    }

    /**
     * 给指定的日期往后加n秒
     * @param date 日期对象
     * @param n 几秒
     * @return 日期
     */
    public static Date addSecond(Date date, int n) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.SECOND, n);
        return calendar.getTime();
    }

	/**
     * 功能：将毫秒级的时间戳转换为日期型
     * @param time 长整型毫秒级的时间戳
     * @return 日期
     */
	public static Date millisecondTimeStampToDate(String time) {
		return new Date(new Long(time));
	}

	/**
     * 功能：将秒级的时间戳转换为日期型
     * @param time 秒级的时间戳
     * @return 日期
     */
	public static Date secondTimeStampToDate(String time) {
		return new Date(new Long(time + "000"));
	}

    /**
     * 功能：构造函数
     */
    public DateFormat() {
        super();
    }

    /**
     * 功能：构造函数
     * @param datePattern 日期格式
     */
    public DateFormat(String datePattern) {
        super();
        this.datePattern = datePattern;
    }

    /**
     * 功能：设置日期格式
     * @param datePattern 日期格式
     */
	public void setDatePattern(String datePattern) {
		this.datePattern = datePattern;
	}

    /**
     * 功能：将字符串格式化成日期
	 * @param arg 日期字符串
     * @return 日期对象
     */
	public Timestamp toTimestamp(String arg) {
		Date d = format(arg);
		if (d != null) {
			return new Timestamp(d.getTime());
		}
		return null;
	}

	/**
	 * 获取本周的第一天
	 * @param day
	 * @return
	 */
	public static Date getFirstDayOfThisWeek(Date day) {
        Calendar calendar = Calendar.getInstance();
		calendar.setFirstDayOfWeek(Calendar.MONDAY);
		calendar.setTime(day);
        calendar.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
        return calendar.getTime();
    }

	/**
	 * 获取本月的第一天
	 * @param day
	 * @return
	 */
	public static Date getFirstDayOfThisMonth(Date day) {
        Calendar calendar = Calendar.getInstance();
		calendar.setFirstDayOfWeek(Calendar.MONDAY);
		calendar.setTime(day);
        calendar.set(Calendar.DAY_OF_MONTH, Calendar.SUNDAY);
        return calendar.getTime();
    }

	/**
     * 获取指定日期周一到周日日期
     * @return
     */
	public static List<String> getOneWeek(Date day) {
		List<String> dateList = new ArrayList<>();
		Calendar calendar = Calendar.getInstance();
		calendar.setFirstDayOfWeek(Calendar.MONDAY);
		calendar.setTime(day);
		calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		int i = 1;
		do {
			dateList.add(format(calendar.getTime(), DATE_FORMAT_1));
			calendar.add(Calendar.DAY_OF_YEAR, 1);
			i++;
		} while (i < 8);
		return dateList;
	}

	private static String[] CHINESE_WEEK = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
	private static String[] ENGLISH_WEEK = {"Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"};

	/**
     * 根据日期获取星期几
     * @param date - 指定的日期
	 * @param language - 指定语言；1：中文，2：英语
     * @return
     */
	public static String getChineseWeek(Date date, int language) {
		Calendar cal = Calendar.getInstance();
		int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
		return language == 1 ? CHINESE_WEEK[w] : ENGLISH_WEEK[w];
	}

    /**
     * 功能：将字符串格式化成日期
     * @param arg 日期字符串
     * @return 日期对象
     */
	public Date format(String arg) {
		if (arg == null) {
			return null;
		}
		this.updateDatePattern(arg);
		// 年
		int t = 0;
		int i = datePattern.indexOf('y');
		int j = datePattern.lastIndexOf('y');
		Calendar c = Calendar.getInstance();
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.YEAR, t);
		} else {
			c.set(Calendar.YEAR, 0);
		}
		// 月
		i = datePattern.indexOf('M');
		j = datePattern.lastIndexOf('M');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1)) - 1;
			c.set(Calendar.MONTH, t);
		} else {
			c.set(Calendar.MONTH, 0);
		}
		// 日
		i = datePattern.indexOf('d');
		j = datePattern.lastIndexOf('d');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.DAY_OF_MONTH, t);
		} else {
			c.set(Calendar.DAY_OF_MONTH, 1);
		}
		// 时
		i = datePattern.indexOf('H');
		j = datePattern.lastIndexOf('H');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.HOUR_OF_DAY, t);
		} else {
			c.set(Calendar.HOUR_OF_DAY, 0);
		}
		// 分
		i = datePattern.indexOf('m');
		j = datePattern.lastIndexOf('m');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.MINUTE, t);
		} else {
			c.set(Calendar.MINUTE, 0);
		}
		// 秒
		i = datePattern.indexOf('s');
		j = datePattern.lastIndexOf('s');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.SECOND, t);
		} else {
			c.set(Calendar.SECOND, 0);
		}
		// 毫秒
		i = datePattern.indexOf('S');
		j = datePattern.lastIndexOf('S');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.MILLISECOND, t);
		} else {
			c.set(Calendar.MILLISECOND, 0);
		}
		return new Timestamp(c.getTime().getTime());
	}

	private void updateDatePattern(String arg) {
		int len = arg.length();
		if (datePattern == null || datePattern.length() != len) {
			if (DATE_FORMAT_1.length() == len) {
				datePattern = DATE_FORMAT_1;
			} else if (DATE_FORMAT_2.length() == len) {
				datePattern = DATE_FORMAT_2;
			} else if (DATE_FORMAT_3.length() == len) {
				datePattern = DATE_FORMAT_3;
			} else if (DATE_FORMAT_5.length() == len) {
				datePattern = DATE_FORMAT_5;
			} else if (DATE_FORMAT_7.length() == len) {
				datePattern = DATE_FORMAT_7;
			} else {
				datePattern = DATE_FORMAT_3;
				// throw new RoseRuntimeException(arg + "没有找到匹配的日期转换格式...");
			}
		}
	}

    /**
     * 功能：将字符串格式化成日期
     * @param arg 日期字符串
     * @return 日期对象
     */
	public Date formatEndDate(String arg) {
		if (arg == null) {
			return null;
		}
		this.updateDatePattern(arg);
		// 年
		int t = 0, len = arg.length();
		int i = datePattern.indexOf('y');
		int j = datePattern.lastIndexOf('y');
		Calendar c = Calendar.getInstance();
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.YEAR, t);
		} else {
			c.set(Calendar.YEAR, 0);
		}
		// 月
		i = datePattern.indexOf('M');
		j = datePattern.lastIndexOf('M');
		if (i != -1 && j != -1 && len > j) {
			t = Integer.parseInt(arg.substring(i, j + 1)) - 1;
			c.set(Calendar.MONTH, t);
		} else {
			c.set(Calendar.MONTH, 0);
		}
		// 日
		i = datePattern.indexOf('d');
		j = datePattern.lastIndexOf('d');
		if (i != -1 && j != -1 && len > j) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.DAY_OF_MONTH, t);
		} else {
			c.set(Calendar.DAY_OF_MONTH, 1);
		}
		// 时
		boolean noHour = false;
		boolean noMinute = false;
		boolean noSecond = false;
		int day = t, hour = 0, minute = 0;
		i = datePattern.indexOf('H');
		j = datePattern.lastIndexOf('H');
		if (i != -1 && j != -1 && len > j) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.HOUR_OF_DAY, t);
			if (t == 0) {
				noHour = true;
			}
			hour = t;
		} 
		else {
			c.set(Calendar.HOUR_OF_DAY, 0);
			noHour = true;
		}
		// 分
		i = datePattern.indexOf('m');
		j = datePattern.lastIndexOf('m');
		if (i != -1 && j != -1 && len > j) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.MINUTE, t);
			if (t == 0) {
				noMinute = true;
			}
			minute = t;
		}
		else {
			c.set(Calendar.MINUTE, 0);
			noMinute = true;
		}
		// 秒
		i = datePattern.indexOf('s');
		j = datePattern.lastIndexOf('s');
		if (i != -1 && j != -1 && len > j) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.SECOND, t);
			if (t == 0) {
				noSecond = true;
			}
		}
		else {
			c.set(Calendar.SECOND, 0);
			noSecond = true;
		}
		// 毫秒
		i = datePattern.indexOf('S');
		j = datePattern.lastIndexOf('S');
		if (i != -1 && j != -1 && len > j) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.MILLISECOND, t);
		} else {
			c.set(Calendar.MILLISECOND, 0);
		}
		// 如果没有小时、分钟、秒，则加一天
		if (noHour && noMinute && noSecond) {
			c.set(Calendar.DAY_OF_MONTH, day + 1);
		} 
		// 如果没有分钟、秒，则加一小时
		else if (noMinute && noSecond) {
			c.set(Calendar.HOUR_OF_DAY, hour + 1);
		} 
		// 如果没有秒，则加一分钟
		else if (noSecond) {
			c.set(Calendar.MINUTE, minute + 1);
		}
		return new Timestamp(c.getTime().getTime());
	}

    /**
     * 功能：将日期格式化成字符串
     * @param date 日期对象
     * @return 日期字符串
     */
	public String format(Date date) {
		if (datePattern == null || date == null) {
			return null;
		}
		StringBuffer buf = new StringBuffer(datePattern);
		// 年
		int i = datePattern.indexOf('y');
		int j = datePattern.lastIndexOf('y');
		Calendar c = Calendar.getInstance();
        c.setTime(date);
		if (i != -1 && j != -1) {
			String year = c.get(Calendar.YEAR) + "";
			int len = j - i + 1;
			year = year.substring(year.length() - len, year.length());
			buf.replace(i, j + 1, year);
		}
		// 月
		i = datePattern.indexOf('M');
		j = datePattern.lastIndexOf('M');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.MONTH) + 1 + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		// 日
		i = datePattern.indexOf('d');
		j = datePattern.lastIndexOf('d');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.DAY_OF_MONTH) + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		// 时
		i = datePattern.indexOf('H');
		j = datePattern.lastIndexOf('H');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.HOUR_OF_DAY) + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		// 分
		i = datePattern.indexOf('m');
		j = datePattern.lastIndexOf('m');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.MINUTE) + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		// 秒
		i = datePattern.indexOf('s');
		j = datePattern.lastIndexOf('s');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.SECOND) + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		// 毫秒
		i = datePattern.indexOf('S');
		j = datePattern.lastIndexOf('S');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.MILLISECOND) + "";
			int len = j - i + 1;
			if (len == str.length()) {
				buf.replace(i, j + 1, str);
			} else {
				if (len > str.length()) {
					str = "00" + str;
					str = str.substring(str.length() - len, str.length());
				} else {
					str = str.substring(0, len);
				}
			}
			buf.replace(i, j + 1, str);
		}
        // 英文月份
        i = datePattern.indexOf('x');
        if (i != -1) {
            String month = MONTH_EN[c.get(Calendar.MONTH)];
            buf.replace(i, i + 1, month);
        }
        return buf.toString();
	}

    /**
     * 英文月份常量
     */
    private static String[] MONTH_EN = {
            "Jan",
            "Feb",
            "Mar",
            "Apr",
            "May",
            "Jun",
            "Jul",
            "Aug",
            "Sep",
            "Oct",
            "Nov",
            "Dec"
    };

    /** 日期格式 */
    private String datePattern = null;

	/**
	 * @param args - 请求参数
	 */
	public static void main(String[] args) {
		DateFormat bean = new DateFormat();
		bean.setDatePattern("yyyy-MM-dd HH:mm:ss");
		System.out.println(bean.format("2003-11-01 11:10:24"));
		bean.setDatePattern("yy-MM-dd HH:mm:ss");
		System.out.println(bean.format("03-01-01 11:10:24"));
		bean.setDatePattern("MMdd");
		System.out.println(bean.format(new Date()));
		bean.setDatePattern("yyyy-MM-dd HH:mm:ss SSS+8");
		System.out.println(bean.format("2003-11-01 11:10:24 000+8"));
        Date d = bean.format("2003-11-01 11:10:24 000+8");
        System.out.println(bean.format(d));
		System.out.println(bean.format(new Date()));
        bean.setDatePattern("x dd, yyyy");// 英文格式 如：April 24，2014
        System.out.println(bean.format(d));
        bean.setDatePattern("MM月dd日");
        System.out.println(bean.format(d));
        System.out.println(bean.toTimestamp("11月01日"));
        System.out.println(format("2016-01-01", "yyyy-MM-dd"));
        System.out.println(format("2016-01", "yyyy-MM"));
		System.out.println(format("2016", "yyyy"));
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, 2016);
        System.out.println(format(c.getTime(), "yyyy-MM-dd"));
        bean.setDatePattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(bean.formatEndDate("2016-01-01 01"));
	}
}
